package com.example.myandroidapp

import android.os.Bundle
import android.view.View
import android.widget.AdapterView
import android.widget.ArrayAdapter
import android.widget.SimpleAdapter
import android.widget.Spinner
import android.widget.Toast
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat

/*
* SimpleAdapter：允许在列表项中同时展示图片和文字
*
* 1. context: Context
● 含义：当前上下文（通常是 Activity 或 Fragment）
● 作用：用于访问应用资源和系统服务
● 示例：this（在 Activity 中）或 requireContext()（在 Fragment 中）
2. data: List<Map<String, *>>
● 含义：数据源列表，每个元素是一个键值对映射（Map）
● 结构：
  ○ 列表中的每个元素代表一行数据
  ○ 每个元素是一个 Map，键是字符串（字段名），值可以是任何类型
3. resource: Int
● 含义：布局资源 ID（R.layout.xxx）
● 作用：定义每个列表项的视图布局
● 要求：
  ○ 布局可以包含多个视图元素（TextView、ImageView 等）
  ○ 每个视图必须有唯一的 ID
● 示例：R.layout.city_item
4. from: Array<String>
● 含义：数据 Map 中的键名数组
● 作用：指定要使用的数据字段
● 要求：
  ○ 数组长度必须与 to 参数相同
  ○ 每个元素必须是 data 中 Map 的键名
● 示例：arrayOf("name", "code")
5. to: IntArray
● 含义：目标视图 ID 数组
● 作用：指定数据要绑定到的视图
● 要求：
  ○ 数组长度必须与 from 参数相同
  ○ 每个元素是视图的 ID（如 R.id.tv_name）
  ○ 顺序与 from 数组一一对应
● 示例：intArrayOf(R.id.tv_name, R.id.tv_code)
*/
class CityIcon : AppCompatActivity() {

    // 0. 数据类
    data class CityData(val icon: Int, val text: String)

    // 1. 定义城市列表
    private val cityList = listOf<CityData>(
        CityData(R.drawable.bj, "北京"),
        CityData(R.drawable.sh, "上海"),
        CityData(R.drawable.gz, "广州"),
        CityData(R.drawable.sz, "深圳"),
        CityData(R.drawable.hz, "杭州"),
        CityData(R.drawable.nj, "南京"),
    )

    // 2. 定义变量接收下拉列表
    private var spCity: Spinner? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        enableEdgeToEdge()
        setContentView(R.layout.activity_city_icon)
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
            val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
            insets
        }

        spCity = findViewById(R.id.spinner_icon)
        spCity?.adapter = SimpleAdapter(
            this,
            cityList.map {
                mapOf("icon" to it.icon, "text" to it.text)
            },
            R.layout.activity_item_icon,
            arrayOf("icon", "text"),
            intArrayOf(R.id.icon, R.id.text)
        )
        spCity?.setSelection(0)
        // 5. 监听选择了哪一项
        spCity?.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
            override fun onItemSelected(
                parent: AdapterView<*>?,
                view: View?,
                position: Int,
                id: Long
            ) {
                Toast.makeText(
                    this@CityIcon,
                    "你选择了" + cityList[position],
                    Toast.LENGTH_SHORT
                ).show()
            }

            override fun onNothingSelected(parent: AdapterView<*>?) {
                TODO("Not yet implemented")
            }
        }
    }
}